• BINN
  • Welcome to the BINN documentation
  • Examples & tutorials
  • BINN - Biologically Informed Neural Network
  • Shap example
  • Scikit-learn API
  • API Reference
  • BINN
  • Network
  • Explain
  • Importance Network & Visualization
  • Scikit-learn API
  • Published with MkDocs
  • Theme by GitBook

In [1]:
Copied!
from binn import Network, BINN
import pandas as pd

input_data = pd.read_csv("../data/test_qm.csv")
translation = pd.read_csv("../data/translation.tsv", sep="\t")
pathways = pd.read_csv("../data/pathways.tsv", sep="\t")

network = Network(
    input_data=input_data,
    pathways=pathways,
    mapping=translation,
    source_column='child',
    target_column='parent'
)

binn = BINN(
    network=network,
    n_layers=4,
    dropout=0.2,
    validate=False,
    residual=True
)
from binn import Network, BINN import pandas as pd input_data = pd.read_csv("../data/test_qm.csv") translation = pd.read_csv("../data/translation.tsv", sep="\t") pathways = pd.read_csv("../data/pathways.tsv", sep="\t") network = Network( input_data=input_data, pathways=pathways, mapping=translation, source_column='child', target_column='parent' ) binn = BINN( network=network, n_layers=4, dropout=0.2, validate=False, residual=True )
/home/erikh/BINN/BINN/test-venv/lib/python3.9/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
In [2]:
Copied!
from util_for_examples import fit_data_matrix_to_network_input, generate_data
import torch
from pytorch_lightning import Trainer

design_matrix = pd.read_csv('../data/design_matrix.tsv', sep="\t")

protein_matrix = fit_data_matrix_to_network_input(
    input_data, features=network.inputs)

X, y = generate_data(protein_matrix, design_matrix=design_matrix)

dataloader = torch.utils.data.DataLoader(dataset=torch.utils.data.TensorDataset(torch.Tensor(X), torch.LongTensor(y)),
                                            batch_size=8,
                                            num_workers=12,
                                            shuffle=True)
trainer = Trainer(max_epochs=3)
trainer.fit(binn, dataloader)
from util_for_examples import fit_data_matrix_to_network_input, generate_data import torch from pytorch_lightning import Trainer design_matrix = pd.read_csv('../data/design_matrix.tsv', sep="\t") protein_matrix = fit_data_matrix_to_network_input( input_data, features=network.inputs) X, y = generate_data(protein_matrix, design_matrix=design_matrix) dataloader = torch.utils.data.DataLoader(dataset=torch.utils.data.TensorDataset(torch.Tensor(X), torch.LongTensor(y)), batch_size=8, num_workers=12, shuffle=True) trainer = Trainer(max_epochs=3) trainer.fit(binn, dataloader)
GPU available: True (cuda), used: False
TPU available: False, using: 0 TPU cores
IPU available: False, using: 0 IPUs
HPU available: False, using: 0 HPUs
GPU available but not used. Set `accelerator` and `devices` using `Trainer(accelerator='gpu', devices=1)`.
You defined a `validation_step` but have no `val_dataloader`. Skipping val loop.

  | Name     | Type             | Params
----------------------------------------------
0 | layers   | Sequential       | 365 K 
1 | loss     | CrossEntropyLoss | 0     
2 | loss_val | CrossEntropyLoss | 0     
----------------------------------------------
365 K     Trainable params
0         Non-trainable params
365 K     Total params
1.464     Total estimated model params size (MB)
The number of training batches (25) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.
Epoch 2: 100%|██████████| 25/25 [00:00<00:00, 49.10it/s, loss=0.674, v_num=408, train_loss=0.672, train_acc=0.599]
`Trainer.fit` stopped: `max_epochs=3` reached.
Epoch 2: 100%|██████████| 25/25 [00:00<00:00, 42.00it/s, loss=0.674, v_num=408, train_loss=0.672, train_acc=0.599]
In [3]:
Copied!
from binn import BINNExplainer

explainer = BINNExplainer(binn)
from binn import BINNExplainer explainer = BINNExplainer(binn)
In [4]:
Copied!
test_data = torch.Tensor(X[5:10])
background_data = torch.Tensor(X[0:5])

importance_df = explainer.explain(test_data, background_data)
importance_df.head()
test_data = torch.Tensor(X[5:10]) background_data = torch.Tensor(X[0:5]) importance_df = explainer.explain(test_data, background_data) importance_df.head()
Using a non-full backward hook when the forward contains multiple autograd Nodes is deprecated and will be removed in future versions. This hook will be missing some grad_input. Please use register_full_backward_hook to get the documented behavior.
Out[4]:
source target source name target name value type source layer target layer
0 1 497 A0M8Q6 R-HSA-166663 0.0 0 0 1
1 1 497 A0M8Q6 R-HSA-166663 0.0 1 0 1
2 1 954 A0M8Q6 R-HSA-198933 0.0 0 0 1
3 1 954 A0M8Q6 R-HSA-198933 0.0 1 0 1
4 1 539 A0M8Q6 R-HSA-2029481 0.0 0 0 1
In [5]:
Copied!
from binn import ImportanceNetwork

IG = ImportanceNetwork(importance_df)
from binn import ImportanceNetwork IG = ImportanceNetwork(importance_df)
In [6]:
Copied!
IG.plot_complete_sankey(multiclass=False, savename='img/test.png', node_cmap='Reds', edge_cmap='Blues')
IG.plot_complete_sankey(multiclass=False, savename='img/test.png', node_cmap='Reds', edge_cmap='Blues')
In [7]:
Copied!
IG.get_node('P15291')
IG.get_node('P15291')
Out[7]:
246
In [8]:
Copied!
query_node = 1

IG.plot_subgraph_sankey(query_node, upstream=False, savename='img/test.png', cmap='BuGn')
query_node = 1 IG.plot_subgraph_sankey(query_node, upstream=False, savename='img/test.png', cmap='BuGn')